package com.play2gether;

import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Raul on 3/04/14.
 */
public class kamasutraActivity extends ActionBarActivity implements View.OnClickListener {

    public String id_postura;
    public String id_usuario;
    public TextView inf;
    public TextView inf_el;
    public TextView inf_ella;
    public TextView nombre;
    public ImageView img;
    public Switch teGusta;
    public Switch probado;
    public Button guardar;
    public Button sugerir;

    public int datosTeGusta;
    public int datosProbado;

    public String nombreImagen;

    private String[] estado;
    private String url;
    private DataBaseManager db;

    //Variables para la bbdd
    private String gustar;
    private String probar;
    public boolean sugerido;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.postura_kamasutra);

        Bundle bundle = getIntent().getExtras();
        id_postura    = bundle.getString("id_postura");
        id_usuario    = bundle.getString("id");
        estado        = bundle.getStringArray("estado");

        db = new DataBaseManager(this);

        configurarVista();
        configurarNavbar();
        obtenerDatos();

        img.setClickable(true);
        img.setOnClickListener(this);
    }
    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    private void configurarVista(){
        inf      = (TextView)  findViewById(R.id.labelInformacion);
        inf_el   = (TextView)  findViewById(R.id.labelParaEl);
        inf_ella = (TextView)  findViewById(R.id.labelParaElla);
        img      = (ImageView) findViewById(R.id.imgPostura);
        nombre   = (TextView)  findViewById(R.id.labelPostura);
        teGusta  = (Switch)    findViewById(R.id.switchMeGusta);
        probado  = (Switch)    findViewById(R.id.switchProbado);
        guardar  = (Button)    findViewById(R.id.b_guardar);
        sugerir  = (Button)    findViewById(R.id.b_sugerir);

        teGusta.setTextOff("No");
        teGusta.setTextOn("Sí");
        probado.setTextOff("No");
        probado.setTextOn("Sí");

        if (!estado[0].equals("2")){ sugerir.setAlpha(0); }
        else                       { sugerir.setOnClickListener(this); }

        guardar.setOnClickListener(this);
        sugerido = false;

    }
    private void configurarNavbar(){
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        actionBar.setCustomView(R.layout.navbar);

        Button btFormularioNV = (Button) findViewById(R.id.btFormularioNV);
        Button btSugerenciaNV = (Button) findViewById(R.id.btSugerenciaNV);
        Button btOpcionesNV   = (Button) findViewById(R.id.btOpcionesNV);
        Button btLogoNV       = (Button) findViewById(R.id.btLogoNV);
        Button btAtras        = (Button) findViewById(R.id.bt_atras);
        Button btSincronizar  = (Button) findViewById(R.id.bt_sincronizar);

        TextView tituloNav = (TextView) findViewById(R.id.tituloLayout);
        tituloNav.setText("Kamasutra");

        //Botones para el navbar
        btOpcionesNV.setOnClickListener(this);
        if (!estado[0].equals("2")) {
            btFormularioNV.setAlpha(0);
            btSugerenciaNV.setAlpha(0);
            btSincronizar.setAlpha(0);
        } else {
            btFormularioNV.setOnClickListener(this);
            btSugerenciaNV.setOnClickListener(this);
        }
            btLogoNV.setOnClickListener(this);
            btAtras.setOnClickListener(this);
            btSincronizar.setOnClickListener(this);
            //btAtras.setAlpha(0);
            //btSincronizar.setAlpha(0);
            //btOpcionesNV.setAlpha(0);

        boolean haySugerencias = db.comprobarSugerencias(id_usuario);
        if (haySugerencias){ btSugerenciaNV.setBackground(this.getResources().getDrawable(R.drawable.bt_sugerencias_notificacion)); }
        else { btSugerenciaNV.setBackground(this.getResources().getDrawable(R.drawable.bt_sugerencia_nav)); }

        boolean hayFormularios = db.comprobarFormularios(id_usuario);
        if (hayFormularios){ btFormularioNV.setBackground(this.getResources().getDrawable(R.drawable.bt_formulario_notificacion)); }
        else { btFormularioNV.setBackground(this.getResources().getDrawable(R.drawable.bt_formulario_nav)); }
    }
    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public void obtenerDatos(){
        Cursor cursor      = db.ObtenerKamasutraPostura(id_postura.toString());
        Cursor cursorDatos = db.ObtenerKamasutraUsuario(Integer.parseInt(id_postura),Integer.parseInt(id_usuario));

        if (cursor.moveToFirst()) {
            cursor.moveToFirst();
            //Posición de la columna del cursor
            int numNombre = cursor.getColumnIndex("nombre_postura");
            int numImagen = cursor.getColumnIndex("imagen");
            int numInfo = cursor.getColumnIndex("informacion");
            int numInfo_el = cursor.getColumnIndex("info_el");
            int numInfo_ella = cursor.getColumnIndex("info_ella");

            //Extrae la información de la columna del cursor
            String info = cursor.getString(numInfo);
            String info_el = cursor.getString(numInfo_el);
            String info_ella = cursor.getString(numInfo_ella);
            String nom = cursor.getString(numNombre);
            nombreImagen = cursor.getString(numImagen);

            //Extrae el nombre de la imagen sin la extensión
            int pos = nombreImagen.length()-4;
            nombreImagen = nombreImagen.substring(0,pos);

            //Añade los textos a los labels del layout
            inf.setText(info);
            inf_el.setText(info_el);
            inf_ella.setText(info_ella);
            nombre.setText(nom);

            //Añade la imagen de la postura al ImageView
            Drawable imagen;
            int idimagen=getResources().getIdentifier(nombreImagen,"drawable","com.play2gether");
            imagen = getResources().getDrawable(idimagen);
            img.setImageDrawable(imagen);
        }
        //Se actualizan los switch
        datosTeGusta = 0;
        datosProbado = 0;
        if (cursorDatos.moveToFirst()) {
            cursorDatos.moveToFirst();

            int numTeGusta = cursorDatos.getColumnIndex("te_gusta");
            int numProbado = cursorDatos.getColumnIndex("probado");

            datosTeGusta = cursorDatos.getInt(numTeGusta);
            datosProbado = cursorDatos.getInt(numProbado);
        }
        if (datosTeGusta==1) { teGusta.setChecked(true);  }
        else                 { teGusta.setChecked(false); }
        if (datosProbado==1) { probado.setChecked(true);  }
        else                 { probado.setChecked(false); }
    }

    @Override
    public void onClick(View view) {
        Intent intent;
        intent = new Intent();

        switch (view.getId()) {
            case R.id.imgPostura:
                intent = intent.setClass(kamasutraActivity.this, posturaZoomActivity.class);
                intent.putExtra("imagen", nombreImagen);
                intent.putExtra("id",id_usuario);
                intent.putExtra("estado",estado);
                startActivity(intent);
                break;
            case R.id.b_sugerir:
                 sugerirPostura();
                 break;
            case R.id.b_guardar:
                 guardarDatos();
                 break;
            //Botones para el natvar
            case R.id.btFormularioNV:
                intent.setClass(this,indexFormularios.class);
                intent.putExtra("id",id_usuario);
                intent.putExtra("estado",estado);
                startActivity(intent);
                finish();
                break;
            case R.id.btSugerenciaNV:
                intent.setClass(this,indexSugerencias.class);
                intent.putExtra("id",id_usuario);
                intent.putExtra("estado",estado);
                startActivity(intent);
                finish();
                break;
            case R.id.btOpcionesNV:
                intent.setClass(this,menuActivity.class);
                intent.putExtra("id",id_usuario);
                intent.putExtra("estado",estado);
                startActivity(intent);
                finish();
                break;
            case R.id.bt_atras:
                finish();
                break;
            case R.id.btLogoNV:
                finish();
                break;
            case R.id.bt_sincronizar:
                sincronizar();
                break;
        }
    }
    private void sugerirPostura(){
        if (sugerido){ mostrarAlerta(3); }
        else {
            try {
                new SugerirPosturaUsuario().execute();
            } catch (Exception e) {
                e.printStackTrace();
                Log.e("ERROR", e.getMessage());
            }
        }
    }
    private void guardarDatos(){
        try {
            new ModificarPosturaUsuario().execute();
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("ERROR", e.getMessage());
        }
    }
    public class ModificarPosturaUsuario extends AsyncTask<Void, Void, JSONObject> {
        //TextView, es el primer dato que se le pasa a doInBackground.
        //El segundo que está en void es el dato que se va actualizar cada vez que se llame al metodo onProgressUpdate(No sobreescrito) para mostrar un mensaje de se está cargando o mostrar una barra de carta
        //El tercero es lo que nos va a devolver. En este caso un String.

        protected void onPreExecute(){ //Aquí se ponen lo que quiero que haga mientras se cargan los datos. Se ejecuta antes de el doInBackground
            Toast.makeText(getApplicationContext(), "Conectando con el servidor", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected JSONObject doInBackground(Void... JSONObject) { // Segunda función. Nos devuelve el parámetro que viene del post se modificará todo lo gráfico que se hace en primer plano.

            url ="http://mediadomeprojects.com/arkdyanbyte/play2gether/public/actualizar_postura";

            HttpClient cliente = new DefaultHttpClient();
            HttpPost htppost = new HttpPost(url);
            //BufferedReader bfr;
            String text = "Error";
            String result="";
            InputStream is = null;
            JSONObject json = null;

            //Obtener los datos del formulario
            gustar = new String();
            probar = new String();
            if (teGusta.isChecked()) { gustar = "1"; }
            else                     { gustar = "0"; }
            if (probado.isChecked()) { probar = "1"; }
            else                     { probar = "0"; }

            //Añadir parametros
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("id_usuario",id_usuario));
            params.add(new BasicNameValuePair("id_postura",id_postura));
            params.add(new BasicNameValuePair("me_gusta",gustar));
            params.add(new BasicNameValuePair("lo_he_probado",probar));

            try {
                htppost.setEntity(new UrlEncodedFormEntity(params));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            try {
                HttpResponse respuesta = cliente.execute(htppost);
                HttpEntity entity = respuesta.getEntity();
                is = entity.getContent();
                //text = EntityUtils.toString(entity);
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
            } catch(Exception e){}

            try{
                json = new JSONObject(result);
            }catch(JSONException e){}
            return json;
        }
        protected void onPostExecute(JSONObject json){
            String estado = "";
            String asunto = "";
            try {
                estado = (String) json.get("estado");
                if (estado.equals("ok")){
                    db.modificarPosturaUsuario(id_usuario, id_postura, probar, gustar);
                    mostrarAlerta(1);
                } //Si no salta a la excepción
                //asunto = (String) json.get("asunto");
                else { Toast.makeText(getApplicationContext(),"No se han modificado los datos!!", Toast.LENGTH_SHORT).show(); }
            } catch (JSONException e) {
               // Toast.makeText(getApplicationContext(),"No se han modificado los datos!!", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        }
    }
    public class SugerirPosturaUsuario extends AsyncTask<Void, Void, JSONObject> {
        //TextView, es el primer dato que se le pasa a doInBackground.
        //El segundo que está en void es el dato que se va actualizar cada vez que se llame al metodo onProgressUpdate(No sobreescrito) para mostrar un mensaje de se está cargando o mostrar una barra de carta
        //El tercero es lo que nos va a devolver. En este caso un String.

        protected void onPreExecute(){ //Aquí se ponen lo que quiero que haga mientras se cargan los datos. Se ejecuta antes de el doInBackground
            Toast.makeText(getApplicationContext(), "Conectando con el servidor", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected JSONObject doInBackground(Void... JSONObject) { // Segunda función. Nos devuelve el parámetro que viene del post se modificará todo lo gráfico que se hace en primer plano.

            url = "http://mediadomeprojects.com/arkdyanbyte/play2gether/public/sugerir_postura";

            HttpClient cliente = new DefaultHttpClient();
            HttpPost htppost = new HttpPost(url);
            //BufferedReader bfr;
            String text = "Error";
            String result="";
            InputStream is = null;
            JSONObject json = null;

            //Añadir parametros
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("id_usuario",id_usuario));
            params.add(new BasicNameValuePair("id_postura",id_postura));

            try {
                htppost.setEntity(new UrlEncodedFormEntity(params));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            try {
                HttpResponse respuesta = cliente.execute(htppost);
                HttpEntity entity = respuesta.getEntity();
                is = entity.getContent();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
            } catch(Exception e){}

            try{
                json = new JSONObject(result);
            }catch(JSONException e){}
            return json;
        }
        protected void onPostExecute(JSONObject json){
            String estado = "";
            String asunto = "";
            try {
                estado = (String) json.get("estado");
                if (estado.equals("ok")){
                    sugerido = true;
                    mostrarAlerta(2);
                } //Si no salta a la excepción
                //asunto = (String) json.get("asunto");
                else { Toast.makeText(getApplicationContext(),"No se ha sugerido la postura!!", Toast.LENGTH_SHORT).show(); }
            } catch (JSONException e) {
                //Toast.makeText(getApplicationContext(),"No se ha sugerido la postura!!", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        }
    }
    public void mostrarAlerta(int tipo){

        String titulo    = new String();
        String subtitulo = new String( "¿Quieres continuar en esta postura?");

        if      (tipo==1) { titulo = "Datos guardados correctamente"; }
        else if (tipo==2) { titulo = "Postura sugerida";              }
        else if (tipo==3) { titulo = "Ya has sugerido esta postura";  }

        AlertDialog.Builder alertDialog = new AlertDialog.Builder(kamasutraActivity.this);
        alertDialog.setTitle(titulo);
        alertDialog.setMessage(subtitulo);

        alertDialog.setPositiveButton("CONTINUAR",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                    }
                });
        alertDialog.setNegativeButton("VOLVER", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });
        alertDialog.show();
    }
    public void sincronizar(){
        Sincronizar sinc = new Sincronizar(id_usuario,this);
        sinc.sincronizar();

    };
}